package com.treepoke.util.logging;

import com.treepoke.util.properties.TPConstant;
import java.io.Serializable;
import java.util.HashMap;
import java.util.logging.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

    public class CRCCLogger implements Serializable {

    private static HashMap<String, CRCCLogger> logs = new HashMap<String, CRCCLogger>();
    private transient Logger cat;

    private CRCCLogger(String name) 
        throws Exception {
        DOMConfigurator.configure(TPConstant.getLOGGER_PROPERTIES());
        cat = Logger.getLogger(name);
    }

    public static CRCCLogger getLogger(String name) {
        try {
            if (logs.get(name) == null) {
                logs.put(name, new CRCCLogger(name));
            }
        } catch (Exception e) {
            java.util.logging.Logger.getLogger(CRCCLogger.class.getPackage().getName()).
                    log(Level.SEVERE, "Error creando CRCCLogger: " + name, e);
        }

        return logs.get(name);
    }

    /**
     * Agrega un nuevo mensaje tipo DEBUG
     *
     * @param message Mensaje a ser agregado (DEBUG)
     */
    public void debugMessage(String message) {
        cat.debug(message);
    }

    /**
     * Agrega un nuevo mensaje tipo WARNING
     *
     * @param message Mensaje a ser agregado (WARNING)
     */
    public void warnMessage(String message) {
        cat.warn(message);
    }

    /**
     * Agrega un nuevo mensaje tipo ERROR
     *
     * @param message Mensaje a ser agregado (ERROR)
     */
    public void errorMessage(String message, Throwable thrown) {
        cat.error(message, thrown);
    }

    /**
     * Agrega un nuevo mensaje tipo INFO
     *
     * @param message Mensaje a ser agregado (INFO)
     */
    public void infoMessage(String message) {
        cat.info(message);
    }

    /**
     * Agrega un nuevo mensaje tipo FATAL
     *
     * @param message Mensaje a ser agregado (FATAL)
     */
    public void fatalMessage(String message) {
        cat.fatal(message);
    }
}
